iT邦幫忙

DAY 13
1

Kuick Application & ORM Framework系列 第 13 篇

Kuick -- 事件替代 Trigger

  • 分享至 

  • xImage
  •  

這裡先不討論是否適合廣泛使用 Trigger 開發系統邏輯,以及使用 Trigger 的便利性以及除錯上帶來的麻煩,這裡僅討論 Kuick Entity 實作的 Instance 事件機制,如何替代資料庫的 Trigger 功能。
每一種資料庫對於 Trigger 有不同的實作,以 SQL Server 而言,分成 DDL Triggers 與 DML Triggers 兩類。Kuick Entity 所關注的在於 Entity 本身,提供的事件機制功能所處理的範圍與 DML Triggers 相似又有些不同,接下來說明 Kuick Entity 的 8 個資料處理事件如何達成 DDL Triggers 可以完成的功能。
以 DML 的 4 種資料操作語法 Select, Insert, Update, Delete,再區分成操作前與操作後,Kuick Entity 僅包含以下 8 種資料處理事件

1. OnInit 物件初始事件
由於事件處理屬於 Instance 範圍,在還未產生 Instance 之前,只有藉由事件處理方法仿事件處理器功能,IEntity 定義 OnInit 方法,可以透過 override OnInit 方法達成物件初始化處理。

[EntitySpec]
public class UserEntity : Entity<UserEntity>
{
	public override void OnInit(object sender, EntityEventArgs e)
	{
		// todo..

		base.OnInit(sender, e);
	}
}

2. AfterSelect 選取後事件

[EntitySpec]
public class UserEntity : Entity<UserEntity>
{
	public UserEntity()
	{
		base.AfterSelect += new InstanceEventHandler(UserEntity_AfterSelect);
	}

	private void UserEntity_AfterSelect(IEntity sender)
	{
		// todo
	}
}

3. BeforeAdd 新增前事件

[EntitySpec]
public class UserEntity : Entity<UserEntity>
{
	public UserEntity()
	{
		base.BeforeAdd += new EntityEventHandler(UserEntity_BeforeAdd);
	}

	private void UserEntity_BeforeAdd(IEntity sender, EntityEventArgs e)
	{
		// todo
	}
}

4. AfterAdd 新增後事件

[EntitySpec]
public class UserEntity : Entity<UserEntity>
{
	public UserEntity()
	{
		base.AfterAdd += new EntityEventHandler(UserEntity_AfterAdd);
	}

	private void UserEntity_AfterAdd(IEntity sender, EntityEventArgs e)
	{
		// todo
	}
}

5. BeforeModify 修改前事件

[EntitySpec]
public class UserEntity : Entity<UserEntity>
{
	public UserEntity()
	{
		base.BeforeModify += new EntityEventHandler(UserEntity_BeforeModify);
	}

	private void UserEntity_BeforeModify(IEntity sender, EntityEventArgs e)
	{
		// todo
	}
}

6. AfterModify 修改後事件

[EntitySpec]
public class UserEntity : Entity<UserEntity>
{
	public UserEntity()
	{
		base.AfterModify += new EntityEventHandler(UserEntity_AfterModify);
	}

	private void UserEntity_AfterModify(IEntity sender, EntityEventArgs e)
	{
		// todo
	}
}

7. BeforeRemove 刪除前事件

[EntitySpec]
public class UserEntity : Entity<UserEntity>
{
	public UserEntity()
	{
		base.BeforeRemove += new EntityEventHandler(UserEntity_BeforeRemove);
	}

	private void UserEntity_BeforeRemove(IEntity sender, EntityEventArgs e)
	{
		// todo
	}
}

8. AfterRemove 刪除後事件

[EntitySpec]
public class UserEntity : Entity<UserEntity>
{
	public UserEntity()
	{
		base.AfterRemove += new EntityEventHandler(UserEntity_AfterRemove);
	}

	private void UserEntity_AfterRemove(IEntity sender, EntityEventArgs e)
	{
		// todo
	}
}

========================================
鐵人賽分享列表:Kuick Application & ORM Framework
開放原始碼專案:kuick.codeplex.com
直接下載原始碼:Kuick
下載相關文件檔:C# Code Conventions and Design Guideline
相關教學影片區:Kuick on YouTube


上一篇
Kuick -- Data Initialize 資料初始化
下一篇
Kuick -- Entity 基本資料結構
系列文
Kuick Application & ORM Framework 共 34 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言